home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 August: Tool Chest / Dev.CD Aug 00 TC Disk 1.toast / pc / sample code / files / morefiles / pascalinterfaces / morefilesextras.p < prev    next >
Encoding:
Text File  |  2000-06-23  |  30.3 KB  |  915 lines

  1. UNIT MoreFilesExtras;
  2.  
  3. {    Apple Macintosh Developer Technical Support                                }
  4. {                                                                            }
  5. {    A collection of useful high-level File Manager routines.                }
  6. {    by Jim Luther, Apple Developer Technical Support Emeritus                }
  7. {                                                                            }
  8. {    File:        MoreFilesExtras.p                                            }
  9. {                                                                            }
  10. {    Copyright © 1992-1999 Apple Computer, Inc.                                }
  11. {    All rights reserved.                                                    }
  12. {                                                                            }
  13. {    You may incorporate this sample code into your applications without        }
  14. {    restriction, though the sample code has been provided "AS IS" and the    }
  15. {    responsibility for its operation is 100% yours.  However, what you are    }
  16. {    not permitted to do is to redistribute the source as "DSC Sample Code"    }
  17. {    after having made changes. If you're going to re-distribute the source,    }
  18. {    we require that you make it clear in the source that the code was        }
  19. {    descended from Apple Sample Code, but that you've made changes.            }
  20.  
  21.  
  22. INTERFACE
  23.  
  24.     USES
  25.         Types, Files, Finder;
  26.  
  27. {***************************************************************************}
  28.  
  29.     CONST
  30.         {    Deny mode permissions for use with the HOpenAware, HOpenRFAware,    }
  31.         {    FSpOpenAware, and FSpOpenRFAware functions.                            }
  32.         {    Note: Common settings are the ones with comments.                    }
  33.  
  34.         dmNone = $0000;
  35.         dmNoneDenyRd = fsRdDenyPerm;
  36.         dmNoneDenyWr = fsWrDenyPerm;
  37.         dmNoneDenyRdWr = fsRdDenyPerm + fsWrDenyPerm;
  38.         dmRd = fsRdPerm;                            { Single writer, multiple readers; the readers }
  39.         dmRdDenyRd = fsRdPerm + fsRdDenyPerm;
  40.         dmRdDenyWr = fsRdPerm + fsWrDenyPerm;        { Browsing - equivalent to fsRdPerm }
  41.         dmRdDenyRdWr = fsRdPerm + fsRdDenyPerm + fsWrDenyPerm;
  42.         dmWr = fsWrPerm;
  43.         dmWrDenyRd = fsWrPerm + fsRdDenyPerm;
  44.         dmWrDenyWr = fsWrPerm + fsWrDenyPerm;
  45.         dmWrDenyRdWr = fsWrPerm + fsRdDenyPerm + fsWrDenyPerm;
  46.         dmRdWr = fsRdWrPerm;                        { Shared access - equivalent to fsRdWrShPerm }
  47.         dmRdWrDenyRd = fsRdWrPerm + fsRdDenyPerm;
  48.         dmRdWrDenyWr = fsRdWrPerm + fsWrDenyPerm;    { Single writer, multiple readers; the writer }
  49.         dmRdWrDenyRdWr = fsRdWrPerm + fsRdDenyPerm + fsWrDenyPerm;    { Exclusive access - equivalent to fsRdWrPerm }
  50.  
  51.         {    Bit masks to get common information out of ioACUser returned by            }
  52.         {    PBGetCatInfo (remember to clear ioACUser before calling PBGetCatInfo    }
  53.         {    since some file systems don't bother to set this field).                }
  54.         {                                                                            }
  55.         {    Use the GetDirAccessRestrictions or FSpGetDirAccessRestrictions            }
  56.         {    functions to retrieve the ioACUser access restrictions byte for            }
  57.         {    a folder.                                                                }
  58.         {                                                                            }
  59.         {    Note:    The access restriction byte returned by PBGetCatInfo is the        }
  60.         {            2's complement of the user's privileges byte returned in        }
  61.         {            ioACAccess by PBHGetDirAccess.                                    }
  62.  
  63.         { mask for just the access restriction bits }
  64.         acUserAccessMask = kioACUserNoSeeFolderMask + kioACUserNoSeeFilesMask + kioACUserNoMakeChangesMask;
  65.  
  66.         { common access privilege settings }
  67.         acUserFull = $00;                        { no access restiction bits on }
  68.         acUserNone = acUserAccessMask;            { all access restiction bits on }
  69.         acUserDropBox = kioACUserNoSeeFolderMask + kioACUserNoSeeFilesMask; { make changes, but not see files or folders }
  70.         acUserBulletinBoard = kioACUserNoMakeChangesMask;    { see files and folders, but not make changes }
  71.  
  72.  
  73. {    For those times where you need to use more than one kind of                }
  74. {    File Manager parameter block but don't feel like wasting stack space,    }
  75. {    here's a parameter block you can reuse.                                    }
  76.  
  77. {$PUSH}
  78. {$ALIGN MAC68K}
  79.  
  80.     TYPE
  81.         UniversalFMPBHandle = ^UniversalFMPBPtr;
  82.         UniversalFMPBPtr = ^UniversalFMPB;
  83.         UniversalFMPB = RECORD
  84.                 CASE Integer OF
  85.                     1: (
  86.                             PB: ParamBlockRec
  87.                     );
  88.                     2: (
  89.                             ciPB: CInfoPBRec
  90.                     );
  91.                     3: (
  92.                             dtPB: DTPBRec
  93.                     );
  94.                     4: (
  95.                             hPB: HParamBlockRec
  96.                     );
  97.                     5: (
  98.                             cmPB: CMovePBRec
  99.                     );
  100.                     6: (
  101.                             wdPB: WDPBRec
  102.                     );
  103.                     7: (
  104.                             fcbPB: FCBPBRec
  105.                     );
  106.                     8: (
  107.                             xPB: XVolumeParam
  108.                     );
  109.             END;
  110.  
  111.  
  112. {    Used by GetUGEntries to return user or group lists.                        }
  113.  
  114.         UGEntryHandle = ^UGEntryPtr;
  115.         UGEntryPtr = ^UGEntry;
  116.         UGEntry = RECORD
  117.                 objType: Integer;
  118.                 objID: LongInt;
  119.                 name: Str31;
  120.             END;
  121.  
  122.  
  123. {    I use the following records instead of the AFPVolMountInfo and            }
  124. {    AFPXVolMountInfo structures in Files.p                                    }
  125.  
  126.         Str8 = STRING[8];
  127.         MyAFPVolMountInfoHandle = ^MyAFPVolMountInfoPtr;
  128.         MyAFPVolMountInfoPtr = ^MyAFPVolMountInfo;
  129.         MyAFPVolMountInfo = RECORD
  130.                 length: Integer;                { length of this record }
  131.                 media: VolumeType;                { type of media, always AppleShareMediaType }
  132.                 flags: Integer;                    { 0 = normal mount; set bit 0 to inhibit greeting messages }
  133.                 nbpInterval: SignedByte;        { NBP interval parameter; 7 is a good choice }
  134.                 nbpCount: SignedByte;            { NBP count parameter; 5 is a good choice }
  135.                 uamType: Integer;                { User Authentication Method }
  136.                 zoneNameOffset: Integer;        { offset from start of record to zoneName }
  137.                 serverNameOffset: Integer;        { offset from start of record to serverName }
  138.                 volNameOffset: Integer;            { offset from start of record to volName }
  139.                 userNameOffset: Integer;        { offset from start of record to userName }
  140.                 userPasswordOffset: Integer;    { offset from start of record to userPassword }
  141.                 volPasswordOffset: Integer;        { offset from start of record to volPassword }
  142.                 zoneName: Str32;                { server's AppleTalk zone name }
  143.                 serverName: Str32;                { server name }
  144.                 volName: Str27;                    { volume name }
  145.                 userName: Str31;                { user name (zero length Pascal string for guest) }
  146.                 userPassword: Str8;                { user password (zero length Pascal string if no user password) }
  147.                 volPassword: Str8;                { volume password (zero length Pascal string if no volume password) }
  148.             END;
  149.         MyAFPXVolMountInfo = RECORD
  150.                 length: Integer;                { length of this record }
  151.                 media: VolumeType;                { type of media, always AppleShareMediaType }
  152.                 flags: Integer;                    { 0 = normal mount; set bit 0 to inhibit greeting messages }
  153.                 nbpInterval: SignedByte;        { NBP interval parameter; 7 is a good choice }
  154.                 nbpCount: SignedByte;            { NBP count parameter; 5 is a good choice }
  155.                 uamType: Integer;                { User Authentication Method }
  156.                 zoneNameOffset: Integer;        { offset from start of record to zoneName }
  157.                 serverNameOffset: Integer;        { offset from start of record to serverName }
  158.                 volNameOffset: Integer;            { offset from start of record to volName }
  159.                 userNameOffset: Integer;        { offset from start of record to userName }
  160.                 userPasswordOffset: Integer;    { offset from start of record to userPassword }
  161.                 volPasswordOffset: Integer;        { offset from start of record to volPassword }
  162.                 extendedFlags: Integer;            { extended flags word }
  163.                 uamNameOffset: Integer;            { offset to a pascal UAM name string }
  164.                 alternateAddressOffset: Integer; { offset to Alternate Addresses in tagged format }
  165.                 zoneName: Str32;                { server's AppleTalk zone name }
  166.                 serverName: Str32;                { server name }
  167.                 volName: Str27;                    { volume name }
  168.                 userName: Str31;                { user name (zero length Pascal string for guest) }
  169.                 userPassword: Str8;                { user password (zero length Pascal string if no user password) }
  170.                 volPassword: Str8;                { volume password (zero length Pascal string if no volume password) }
  171.                 uamName: Str32;                    { UAM name }
  172.                 alternateAddress: Packed Array [0..0] OF Char; { variable length data }
  173.             END;
  174.  
  175. {$ALIGN RESET}
  176. {$POP}
  177.  
  178.  
  179. {***************************************************************************}
  180.  
  181.     {    Functions to get information out of GetVolParmsInfoBuffer.    }
  182.     {    (implemented in this Unit).                                    }
  183.     
  184.     { version 1 field getters }
  185.     FUNCTION GetVolParmsInfoVersion(VAR volParms: GetVolParmsInfoBuffer): INTEGER;
  186.     FUNCTION GetVolParmsInfoAttrib(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  187.     FUNCTION GetVolParmsInfoLocalHand(VAR volParms: GetVolParmsInfoBuffer): Handle;
  188.     FUNCTION GetVolParmsInfoServerAdr(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  189.     { version 2 field getters (assume zero result if not version >= 2) }
  190.     FUNCTION GetVolParmsInfoVolumeGrade(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  191.     FUNCTION GetVolParmsInfoForeignPrivID(VAR volParms: GetVolParmsInfoBuffer): INTEGER;
  192.     { version 3 field getters (assume zero result if not version >= 3) }
  193.     FUNCTION GetVolParmsInfoExtendedAttributes(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  194.     
  195.     { attribute bits supported by all versions of GetVolParmsInfoBuffer }
  196.     FUNCTION isNetworkVolume (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  197.     FUNCTION hasLimitFCBs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  198.     FUNCTION hasLocalWList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  199.     FUNCTION hasNoMiniFndr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  200.     FUNCTION hasNoVNEdit (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  201.     FUNCTION hasNoLclSync (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  202.     FUNCTION hasTrshOffLine (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  203.     FUNCTION hasNoSwitchTo (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  204.     FUNCTION hasNoDeskItems (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  205.     FUNCTION hasNoBootBlks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  206.     FUNCTION hasAccessCntl (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  207.     FUNCTION hasNoSysDir (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  208.     FUNCTION hasExtFSVol (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  209.     FUNCTION hasOpenDeny (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  210.     FUNCTION hasCopyFile (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  211.     FUNCTION hasMoveRename (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  212.     FUNCTION hasDesktopMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  213.     FUNCTION hasShortName (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  214.     FUNCTION hasFolderLock (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  215.     FUNCTION hasPersonalAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  216.     FUNCTION hasUserGroupList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  217.     FUNCTION hasCatSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  218.     FUNCTION hasFileIDs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  219.     FUNCTION hasBTreeMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  220.     FUNCTION hasBlankAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  221.     FUNCTION supportsAsyncRequests (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  222.     FUNCTION supportsTrashVolumeCache (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  223.  
  224.     { attribute bits supported by version 3 and greater versions of GetVolParmsInfoBuffer }
  225.     FUNCTION volIsEjectable (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  226.     FUNCTION volSupportsHFSPlusAPIs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  227.     FUNCTION volSupportsFSCatalogSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  228.     FUNCTION volSupportsFSExchangeObjects (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  229.     FUNCTION volSupports2TBFiles (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  230.     FUNCTION volSupportsLongNames (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  231.     FUNCTION volSupportsMultiScriptNames (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  232.     FUNCTION volSupportsNamedForks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  233.     FUNCTION volSupportsSubtreeIterators (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  234.     FUNCTION volL2PCanMapFileBlocks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  235.  
  236.     {    Functions to get common information out of ioACUser.    }
  237.     {    (implemented in this Unit).                                }
  238.     FUNCTION userIsOwner (ioACUser: SInt8): Boolean;
  239.     FUNCTION userHasFullAccess (ioACUser: SInt8): Boolean;
  240.     FUNCTION userHasDropBoxAccess (ioACUser: SInt8): Boolean;
  241.     FUNCTION userHasBulletinBoard (ioACUser: SInt8): Boolean;
  242.     FUNCTION userHasNoAccess (ioACUser: SInt8): Boolean;
  243.  
  244.  
  245. {***************************************************************************}
  246.  
  247.  
  248.     PROCEDURE TruncPString (destination: StringPtr;
  249.                                     source: StringPtr;
  250.                                     maxLength: Integer);
  251.  
  252.     FUNCTION GetTempBuffer (buffReqSize: LONGINT;
  253.                                     VAR buffActSize: LONGINT): Ptr;
  254.  
  255.     FUNCTION GetVolumeInfoNoName (pathname: StringPtr;
  256.                                     vRefNum: Integer;
  257.                                     VAR pb: HParamBlockRec): OSErr;
  258.  
  259.     FUNCTION XGetVolumeInfoNoName(pathname: StringPtr;
  260.                                     vRefNum: Integer;
  261.                                     VAR pb: XVolumeParam): OSErr;
  262.     
  263.     FUNCTION GetCatInfoNoName (vRefNum: Integer;
  264.                                     dirID: LongInt;
  265.                                     name: StringPtr;
  266.                                     VAR pb: CInfoPBRec): OSErr;
  267.  
  268.     FUNCTION DetermineVRefNum (pathname: StringPtr;
  269.                                     vRefNum: Integer;
  270.                                     VAR realVRefNum: Integer): OSErr;
  271.  
  272.     FUNCTION HGetVInfo (volReference: Integer;
  273.                                     volName: StringPtr;
  274.                                     VAR vRefNum: Integer;
  275.                                     VAR freeBytes: LongInt;
  276.                                     VAR totalBytes: LongInt): OSErr;
  277.  
  278.     FUNCTION XGetVInfo (volReference: Integer;
  279.                                     volName: StringPtr;
  280.                                     VAR vRefNum: Integer;
  281.                                     VAR freeBytes: UnsignedWide;
  282.                                     VAR totalBytes: UnsignedWide): OSErr;
  283.  
  284.     FUNCTION CheckVolLock (pathname: StringPtr;
  285.                                     vRefNum: Integer): OSErr;
  286.  
  287.     FUNCTION GetDriverName (driverRefNum: Integer;
  288.                                     VAR driverName: Str255): OSErr;
  289.  
  290.     FUNCTION FindDrive (pathname: StringPtr;
  291.                                     vRefNum: Integer;
  292.                                     VAR driveQElementPtr: DrvQElPtr): OSErr;
  293.  
  294.     FUNCTION GetVolFileSystemID (pathname: StringPtr;
  295.                                     vRefNum: Integer;
  296.                                     VAR fileSystemID: Integer): OSErr;
  297.                                    
  298.     FUNCTION GetVolState (pathname: StringPtr;
  299.                                     vRefNum: Integer;
  300.                                     VAR volumeOnline: Boolean;
  301.                                     VAR volumeEjected: Boolean;
  302.                                     VAR driveEjectable: Boolean;
  303.                                     VAR driverWantsEject: Boolean): OSErr;
  304.                                    
  305.     FUNCTION UnmountAndEject (pathname: StringPtr;
  306.                                     vRefNum: Integer): OSErr;
  307.  
  308.     FUNCTION OnLine (volumes: FSSpecPtr;
  309.                                     reqVolCount: Integer;
  310.                                     VAR actVolCount: Integer;
  311.                                     VAR volIndex: Integer): OSErr;
  312.  
  313.     FUNCTION SetDefault (newVRefNum: Integer;
  314.                                     newDirID: LongInt;
  315.                                     VAR oldVRefNum: Integer;
  316.                                     VAR oldDirID: LongInt): OSErr;
  317.  
  318.     FUNCTION RestoreDefault (oldVRefNum: Integer;
  319.                                     oldDirID: LongInt): OSErr;
  320.  
  321.     FUNCTION GetDInfo (vRefNum: Integer;
  322.                                     dirID: LongInt;
  323.                                     name: StringPtr;
  324.                                     VAR fndrInfo: DInfo): OSErr;
  325.  
  326.     FUNCTION FSpGetDInfo ({CONST}
  327.                                     VAR spec: FSSpec;
  328.                                     VAR fndrInfo: DInfo): OSErr;
  329.  
  330.     FUNCTION SetDInfo (vRefNum: Integer;
  331.                                     dirID: LongInt;
  332.                                     name: StringPtr;
  333.                                     fndrInfo: DInfo): OSErr;
  334.  
  335.     FUNCTION FSpSetDInfo ({CONST}
  336.                                     VAR spec: FSSpec;
  337.                                     fndrInfo: DInfo): OSErr;
  338.  
  339.     FUNCTION GetDirectoryID (vRefNum: Integer;
  340.                                     dirID: LongInt;
  341.                                     name: StringPtr;
  342.                                     VAR theDirID: LongInt;
  343.                                     VAR isDirectory: Boolean): OSErr;
  344.  
  345.     FUNCTION FSpGetDirectoryID ({CONST}
  346.                                     VAR spec: FSSpec;
  347.                                     VAR theDirID: LongInt;
  348.                                     VAR isDirectory: Boolean): OSErr;
  349.  
  350.     FUNCTION GetDirName (vRefNum: Integer;
  351.                                     dirID: LongInt;
  352.                                     VAR name: Str31): OSErr;
  353.  
  354.     FUNCTION GetIOACUser (vRefNum: Integer;
  355.                                     dirID: LongInt;
  356.                                     name: StringPtr;
  357.                                     VAR ioACUser: SInt8): OSErr;
  358.  
  359.     FUNCTION FSpGetIOACUser (vRefNum: Integer;
  360.                                     dirID: LongInt;
  361.                                     name: StringPtr;
  362.                                     VAR ioACUser: SInt8): OSErr;
  363.  
  364.     FUNCTION GetParentID (vRefNum: Integer;
  365.                                     dirID: LongInt;
  366.                                     name: StringPtr;
  367.                                     VAR parID: LongInt): OSErr;
  368.  
  369.     FUNCTION GetFilenameFromPathname (pathname: Str255;
  370.                                     VAR filename: Str255): OSErr;
  371.  
  372.     FUNCTION GetObjectLocation (vRefNum: Integer;
  373.                                     dirID: LongInt;
  374.                                     pathname: StringPtr;
  375.                                     VAR realVRefNum: Integer;
  376.                                     VAR realParID: LongInt;
  377.                                     VAR realName: Str255;
  378.                                     VAR isDirectory: Boolean): OSErr;
  379.  
  380.     FUNCTION GetDirItems (vRefNum: Integer;
  381.                                     dirID: LongInt;
  382.                                     name: StringPtr;
  383.                                     getFiles: Boolean;
  384.                                     getDirectories: Boolean;
  385.                                     items: FSSpecPtr;
  386.                                     reqItemCount: Integer;
  387.                                     VAR actItemCount: Integer;
  388.                                     VAR itemIndex: Integer): OSErr;
  389.  
  390.     FUNCTION DeleteDirectoryContents (vRefNum: Integer;
  391.                                     dirID: LongInt;
  392.                                     name: StringPtr): OSErr;
  393.  
  394.     FUNCTION DeleteDirectory (vRefNum: Integer;
  395.                                     dirID: LongInt;
  396.                                     name: StringPtr): OSErr;
  397.  
  398.     FUNCTION CheckObjectLock (vRefNum: Integer;
  399.                                     dirID: LongInt;
  400.                                     name: StringPtr): OSErr;
  401.  
  402.     FUNCTION FSpCheckObjectLock ({CONST}
  403.                                     VAR spec: FSSpec): OSErr;
  404.  
  405.     FUNCTION GetFileSize (vRefNum: Integer;
  406.                                     dirID: LongInt;
  407.                                     fileName: Str255;
  408.                                     VAR dataSize: LONGINT;
  409.                                     VAR rsrcSize: LONGINT): OSErr;
  410.  
  411.     FUNCTION FSpGetFileSize ({CONST}
  412.                                     VAR spec: FSSpec;
  413.                                     VAR dataSize: LONGINT;
  414.                                     VAR rsrcSize: LONGINT): OSErr;
  415.  
  416.     FUNCTION BumpDate (vRefNum: Integer;
  417.                                     dirID: LongInt;
  418.                                     name: StringPtr): OSErr;
  419.  
  420.     FUNCTION FSpBumpDate ({CONST}
  421.                                     VAR spec: FSSpec): OSErr;
  422.  
  423.  
  424.     FUNCTION ChangeCreatorType (vRefNum: Integer;
  425.                                     dirID: LongInt;
  426.                                     name: Str255;
  427.                                     creator: OSType;
  428.                                     fileType: OSType): OSErr;
  429.  
  430.     FUNCTION FSpChangeCreatorType ({CONST}
  431.                                     VAR spec: FSSpec;
  432.                                     creator: OSType;
  433.                                     fileType: OSType): OSErr;
  434.  
  435.     FUNCTION ChangeFDFlags (vRefNum: Integer;
  436.                                     dirID: LongInt;
  437.                                     name: StringPtr;
  438.                                     setBits: Boolean;
  439.                                     flagBits: Integer): OSErr;
  440.  
  441.     FUNCTION FSpChangeFDFlags ({CONST}
  442.                                     VAR spec: FSSpec;
  443.                                     setBits: Boolean;
  444.                                     flagBits: Integer): OSErr;
  445.  
  446.     FUNCTION SetIsInvisible (vRefNum: Integer;
  447.                                     dirID: LongInt;
  448.                                     name: StringPtr): OSErr;
  449.  
  450.     FUNCTION FSpSetIsInvisible ({CONST}
  451.                                     VAR spec: FSSpec): OSErr;
  452.  
  453.     FUNCTION ClearIsInvisible (vRefNum: Integer;
  454.                                     dirID: LongInt;
  455.                                     name: StringPtr): OSErr;
  456.  
  457.     FUNCTION FSpClearIsInvisible ({CONST}
  458.                                     VAR spec: FSSpec): OSErr;
  459.  
  460.     FUNCTION SetNameLocked (vRefNum: Integer;
  461.                                     dirID: LongInt;
  462.                                     name: StringPtr): OSErr;
  463.  
  464.     FUNCTION FSpSetNameLocked ({CONST}
  465.                                     VAR spec: FSSpec): OSErr;
  466.  
  467.     FUNCTION ClearNameLocked (vRefNum: Integer;
  468.                                     dirID: LongInt;
  469.                                     name: StringPtr): OSErr;
  470.  
  471.     FUNCTION FSpClearNameLocked ({CONST}
  472.                                     VAR spec: FSSpec): OSErr;
  473.  
  474.     FUNCTION SetIsStationery (vRefNum: Integer;
  475.                                     dirID: LongInt;
  476.                                     name: Str255): OSErr;
  477.  
  478.     FUNCTION FSpSetIsStationery ({CONST}
  479.                                     VAR spec: FSSpec): OSErr;
  480.  
  481.     FUNCTION ClearIsStationery (vRefNum: Integer;
  482.                                     dirID: LongInt;
  483.                                     name: Str255): OSErr;
  484.  
  485.     FUNCTION FSpClearIsStationery ({CONST}
  486.                                     VAR spec: FSSpec): OSErr;
  487.  
  488.     FUNCTION SetHasCustomIcon (vRefNum: Integer;
  489.                                     dirID: LongInt;
  490.                                     name: StringPtr): OSErr;
  491.  
  492.     FUNCTION FSpSetHasCustomIcon ({CONST}
  493.                                     VAR spec: FSSpec): OSErr;
  494.  
  495.     FUNCTION ClearHasCustomIcon (vRefNum: Integer;
  496.                                     dirID: LongInt;
  497.                                     name: StringPtr): OSErr;
  498.  
  499.     FUNCTION FSpClearHasCustomIcon ({CONST}
  500.                                     VAR spec: FSSpec): OSErr;
  501.  
  502.     FUNCTION ClearHasBeenInited (vRefNum: Integer;
  503.                                     dirID: LongInt;
  504.                                     name: StringPtr): OSErr;
  505.  
  506.     FUNCTION FSpClearHasBeenInited ({CONST}
  507.                                     VAR spec: FSSpec): OSErr;
  508.  
  509.     FUNCTION CopyFileMgrAttributes (srcVRefNum: Integer;
  510.                                     srcDirID: LongInt;
  511.                                     srcName: StringPtr;
  512.                                     dstVRefNum: Integer;
  513.                                     dstDirID: LongInt;
  514.                                     dstName: StringPtr;
  515.                                     copyLockBit: Boolean): OSErr;
  516.  
  517.     FUNCTION FSpCopyFileMgrAttributes ({CONST}
  518.                                     VAR srcSpec: FSSpec;
  519.                                     {CONST}
  520.                                     VAR dstSpec: FSSpec;
  521.                                     copyLockBit: Boolean): OSErr;
  522.  
  523.     FUNCTION HOpenAware (vRefNum: Integer;
  524.                                     dirID: LongInt;
  525.                                     fileName: Str255;
  526.                                     denyModes: Integer;
  527.                                     VAR refNum: Integer): OSErr;
  528.  
  529.     FUNCTION FSpOpenAware ({CONST}
  530.                                     VAR spec: FSSpec;
  531.                                     denyModes: Integer;
  532.                                     VAR refNum: Integer): OSErr;
  533.  
  534.     FUNCTION HOpenRFAware (vRefNum: Integer;
  535.                                     dirID: LongInt;
  536.                                     fileName: Str255;
  537.                                     denyModes: Integer;
  538.                                     VAR refNum: Integer): OSErr;
  539.  
  540.     FUNCTION FSpOpenRFAware ({CONST}
  541.                                     VAR spec: FSSpec;
  542.                                     denyModes: Integer;
  543.                                     VAR refNum: Integer): OSErr;
  544.  
  545.     FUNCTION FSReadNoCache (refNum: Integer;
  546.                                     VAR count: LongInt;
  547.                                     buffPtr: Ptr): OSErr;
  548.  
  549.     FUNCTION FSWriteNoCache (refNum: Integer;
  550.                                     VAR count: LongInt;
  551.                                     buffPtr: Ptr): OSErr;
  552.  
  553.     FUNCTION FSWriteVerify (refNum: Integer;
  554.                                     VAR count: LongInt;
  555.                                     buffPtr: Ptr): OSErr;
  556.  
  557.     FUNCTION CopyFork (srcRefNum: Integer;
  558.                                     dstRefNum: Integer;
  559.                                     copyBufferPtr: Ptr;
  560.                                     copyBufferSize: LongInt): OSErr;
  561.  
  562.     FUNCTION GetFileLocation (refNum: Integer;
  563.                                     VAR vRefNum: Integer;
  564.                                     VAR dirID: LongInt;
  565.                                     fileName: StringPtr): OSErr;
  566.  
  567.     FUNCTION FSpGetFileLocation (refNum: Integer;
  568.                                     VAR spec: FSSpec): OSErr;
  569.  
  570.     FUNCTION CopyDirectoryAccess (srcVRefNum: Integer;
  571.                                     srcDirID: LongInt;
  572.                                     srcName: StringPtr;
  573.                                     dstVRefNum: Integer;
  574.                                     dstDirID: LongInt;
  575.                                     dstName: StringPtr): OSErr;
  576.  
  577.     FUNCTION FSpCopyDirectoryAccess ({CONST}
  578.                                     VAR srcSpec: FSSpec;
  579.                                     {CONST}
  580.                                     VAR dstSpec: FSSpec): OSErr;
  581.  
  582.     FUNCTION HMoveRenameCompat (vRefNum: Integer;
  583.                                     srcDirID: LongInt;
  584.                                     srcName: Str255;
  585.                                     dstDirID: LongInt;
  586.                                     dstpathName: StringPtr;
  587.                                     copyName: StringPtr): OSErr;
  588.  
  589.     FUNCTION FSpMoveRenameCompat ({CONST}
  590.                                     VAR srcSpec: FSSpec;
  591.                                     {CONST}
  592.                                     VAR dstSpec: FSSpec;
  593.                                     copyName: StringPtr): OSErr;
  594.  
  595.     FUNCTION BuildAFPVolMountInfo (flags: Integer;
  596.                                     nbpInterval: SignedByte;
  597.                                     nbpCount: SignedByte;
  598.                                     uamType: Integer;
  599.                                     zoneName: Str32;
  600.                                     serverName: Str32;
  601.                                     volName: Str27;
  602.                                     userName: Str31;
  603.                                     userPassword: Str8;
  604.                                     volPassword: Str8;
  605.                                     VAR afpInfoPtr: MyAFPVolMountInfoPtr): OSErr;
  606.  
  607.     FUNCTION RetrieveAFPVolMountInfo (afpInfoPtr: AFPVolMountInfoPtr;
  608.                                     VAR flags: Integer;
  609.                                     VAR uamType: Integer;
  610.                                     zoneName: StringPtr;
  611.                                     serverName: StringPtr;
  612.                                     volName: StringPtr;
  613.                                     userName: StringPtr): OSErr;
  614.  
  615.     FUNCTION BuildAFPXVolMountInfo (flags: Integer;
  616.                                     nbpInterval: SignedByte;
  617.                                     nbpCount: SignedByte;
  618.                                     uamType: Integer;
  619.                                     zoneName: Str32;
  620.                                     serverName: Str32;
  621.                                     volName: Str27;
  622.                                     userName: Str31;
  623.                                     userPassword: Str8;
  624.                                     volPassword: Str8;
  625.                                     uamName: Str32;
  626.                                     alternateAddressLength: LongInt;
  627.                                     alternateAddress: Ptr;
  628.                                     VAR afpXInfoPtr: AFPXVolMountInfoPtr): OSErr;
  629.  
  630.     FUNCTION RetrieveAFPXVolMountInfo(afpXInfoPtr: AFPXVolMountInfoPtr;
  631.                                     VAR flags: Integer;
  632.                                     VAR uamType: Integer;
  633.                                     zoneName: StringPtr;
  634.                                     serverName: StringPtr;
  635.                                     volName: StringPtr;
  636.                                     userName: StringPtr;
  637.                                     uamName: StringPtr;
  638.                                     VAR alternateAddressLength: LongInt;
  639.                                     VAR    alternateAddress: AFPAlternateAddressPtr): OSErr;
  640.  
  641.     FUNCTION GetUGEntries (objType: Integer;
  642.                                     entries: UGEntryPtr;
  643.                                     reqEntryCount: LongInt;
  644.                                     VAR actEntryCount: LongInt;
  645.                                     VAR objID: LongInt): OSErr;
  646.  
  647.  
  648. {***************************************************************************}
  649.  
  650.  
  651. IMPLEMENTATION
  652.  
  653.     {    Functions to get information out of GetVolParmsInfoBuffer.    }
  654.     
  655.     FUNCTION GetVolParmsInfoVersion(VAR volParms: GetVolParmsInfoBuffer): INTEGER;
  656.     BEGIN
  657.         GetVolParmsInfoVersion := volParms.vMVersion;
  658.     END;
  659.     
  660.     FUNCTION GetVolParmsInfoAttrib(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  661.     BEGIN
  662.         GetVolParmsInfoAttrib := volParms.vMAttrib;
  663.     END;
  664.     
  665.     FUNCTION GetVolParmsInfoLocalHand(VAR volParms: GetVolParmsInfoBuffer): Handle;
  666.     BEGIN
  667.         GetVolParmsInfoLocalHand := volParms.vMLocalHand;
  668.     END;
  669.     
  670.     FUNCTION GetVolParmsInfoServerAdr(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  671.     BEGIN
  672.         GetVolParmsInfoServerAdr := volParms.vMServerAdr;
  673.     END;
  674.  
  675.     FUNCTION GetVolParmsInfoVolumeGrade(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  676.     BEGIN
  677.         IF volParms.vMVersion >= 2
  678.             THEN
  679.                 GetVolParmsInfoVolumeGrade := volParms.vMVolumeGrade
  680.             ELSE
  681.                 GetVolParmsInfoVolumeGrade := 0;
  682.     END;
  683.     
  684.     FUNCTION GetVolParmsInfoForeignPrivID(VAR volParms: GetVolParmsInfoBuffer): INTEGER;
  685.     BEGIN
  686.         IF volParms.vMVersion >= 2
  687.             THEN
  688.                 GetVolParmsInfoForeignPrivID := volParms.vMForeignPrivID
  689.             ELSE
  690.                 GetVolParmsInfoForeignPrivID := 0;
  691.     END;
  692.     
  693.     FUNCTION GetVolParmsInfoExtendedAttributes(VAR volParms: GetVolParmsInfoBuffer): LONGINT;
  694.     BEGIN
  695.         IF volParms.vMVersion >= 3
  696.             THEN
  697.                 GetVolParmsInfoExtendedAttributes := volParms.vMExtendedAttributes
  698.             ELSE
  699.                 GetVolParmsInfoExtendedAttributes := 0;
  700.     END;
  701.     
  702.     FUNCTION isNetworkVolume (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  703.     BEGIN
  704.         isNetworkVolume := (volParms.vMServerAdr <> 0);
  705.     END;
  706.  
  707.     FUNCTION hasLimitFCBs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  708.     BEGIN
  709.         hasLimitFCBs := BTST(volParms.vMAttrib, bLimitFCBs);
  710.     END;
  711.  
  712.     FUNCTION hasLocalWList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  713.     BEGIN
  714.         hasLocalWList := BTST(volParms.vMAttrib, bLocalWList);
  715.     END;
  716.  
  717.     FUNCTION hasNoMiniFndr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  718.     BEGIN
  719.         hasNoMiniFndr := BTST(volParms.vMAttrib, bNoMiniFndr);
  720.     END;
  721.  
  722.     FUNCTION hasNoVNEdit (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  723.     BEGIN
  724.         hasNoVNEdit := BTST(volParms.vMAttrib, bNoVNEdit);
  725.     END;
  726.  
  727.     FUNCTION hasNoLclSync (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  728.     BEGIN
  729.         hasNoLclSync := BTST(volParms.vMAttrib, bNoLclSync);
  730.     END;
  731.  
  732.     FUNCTION hasTrshOffLine (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  733.     BEGIN
  734.         hasTrshOffLine := BTST(volParms.vMAttrib, bTrshOffLine);
  735.     END;
  736.  
  737.     FUNCTION hasNoSwitchTo (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  738.     BEGIN
  739.         hasNoSwitchTo := BTST(volParms.vMAttrib, bNoSwitchTo);
  740.     END;
  741.  
  742.     FUNCTION hasNoDeskItems (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  743.     BEGIN
  744.         hasNoDeskItems := BTST(volParms.vMAttrib, bNoDeskItems);
  745.     END;
  746.  
  747.     FUNCTION hasNoBootBlks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  748.     BEGIN
  749.         hasNoBootBlks := BTST(volParms.vMAttrib, bNoBootBlks);
  750.     END;
  751.  
  752.     FUNCTION hasAccessCntl (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  753.     BEGIN
  754.         hasAccessCntl := BTST(volParms.vMAttrib, bAccessCntl);
  755.     END;
  756.  
  757.     FUNCTION hasNoSysDir (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  758.     BEGIN
  759.         hasNoSysDir := BTST(volParms.vMAttrib, bNoSysDir);
  760.     END;
  761.  
  762.     FUNCTION hasExtFSVol (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  763.     BEGIN
  764.         hasExtFSVol := BTST(volParms.vMAttrib, bHasExtFSVol);
  765.     END;
  766.  
  767.     FUNCTION hasOpenDeny (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  768.     BEGIN
  769.         hasOpenDeny := BTST(volParms.vMAttrib, bHasOpenDeny);
  770.     END;
  771.  
  772.     FUNCTION hasCopyFile (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  773.     BEGIN
  774.         hasCopyFile := BTST(volParms.vMAttrib, bHasCopyFile);
  775.     END;
  776.  
  777.     FUNCTION hasMoveRename (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  778.     BEGIN
  779.         hasMoveRename := BTST(volParms.vMAttrib, bHasMoveRename);
  780.     END;
  781.  
  782.     FUNCTION hasDesktopMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  783.     BEGIN
  784.         hasDesktopMgr := BTST(volParms.vMAttrib, bHasDesktopMgr);
  785.     END;
  786.  
  787.     FUNCTION hasShortName (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  788.     BEGIN
  789.         hasShortName := BTST(volParms.vMAttrib, bHasShortName);
  790.     END;
  791.  
  792.     FUNCTION hasFolderLock (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  793.     BEGIN
  794.         hasFolderLock := BTST(volParms.vMAttrib, bHasFolderLock);
  795.     END;
  796.  
  797.     FUNCTION hasPersonalAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  798.     BEGIN
  799.         hasPersonalAccessPrivileges := BTST(volParms.vMAttrib, bHasPersonalAccessPrivileges);
  800.     END;
  801.  
  802.     FUNCTION hasUserGroupList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  803.     BEGIN
  804.         hasUserGroupList := BTST(volParms.vMAttrib, bHasUserGroupList);
  805.     END;
  806.  
  807.     FUNCTION hasCatSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  808.     BEGIN
  809.         hasCatSearch := BTST(volParms.vMAttrib, bHasCatSearch);
  810.     END;
  811.  
  812.     FUNCTION hasFileIDs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  813.     BEGIN
  814.         hasFileIDs := BTST(volParms.vMAttrib, bHasFileIDs);
  815.     END;
  816.  
  817.     FUNCTION hasBTreeMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  818.     BEGIN
  819.         hasBTreeMgr := BTST(volParms.vMAttrib, bHasBTreeMgr);
  820.     END;
  821.  
  822.     FUNCTION hasBlankAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  823.     BEGIN
  824.         hasBlankAccessPrivileges := BTST(volParms.vMAttrib, bHasBlankAccessPrivileges);
  825.     END;
  826.  
  827.     FUNCTION supportsAsyncRequests (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  828.     BEGIN
  829.         supportsAsyncRequests := BTST(volParms.vMAttrib, bSupportsAsyncRequests);
  830.     END;
  831.  
  832.     FUNCTION supportsTrashVolumeCache (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  833.     BEGIN
  834.         supportsTrashVolumeCache := BTST(volParms.vMAttrib, bSupportsTrashVolumeCache);
  835.     END;
  836.  
  837.     FUNCTION volIsEjectable (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  838.     BEGIN
  839.         volIsEjectable := BTST(GetVolParmsInfoExtendedAttributes(volParms), bIsEjectable);
  840.     END;
  841.     
  842.     FUNCTION volSupportsHFSPlusAPIs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  843.     BEGIN
  844.         volSupportsHFSPlusAPIs := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupportsHFSPlusAPIs);
  845.     END;
  846.     
  847.     FUNCTION volSupportsFSCatalogSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  848.     BEGIN
  849.         volSupportsFSCatalogSearch := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupportsFSCatalogSearch);
  850.     END;
  851.     
  852.     FUNCTION volSupportsFSExchangeObjects (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  853.     BEGIN
  854.         volSupportsFSExchangeObjects := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupportsFSExchangeObjects);
  855.     END;
  856.     
  857.     FUNCTION volSupports2TBFiles (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  858.     BEGIN
  859.         volSupports2TBFiles := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupports2TBFiles);
  860.     END;
  861.     
  862.     FUNCTION volSupportsLongNames (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  863.     BEGIN
  864.         volSupportsLongNames := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupportsLongNames);
  865.     END;
  866.     
  867.     FUNCTION volSupportsMultiScriptNames (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  868.     BEGIN
  869.         volSupportsMultiScriptNames := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupportsMultiScriptNames);
  870.     END;
  871.     
  872.     FUNCTION volSupportsNamedForks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  873.     BEGIN
  874.         volSupportsNamedForks := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupportsNamedForks);
  875.     END;
  876.     
  877.     FUNCTION volSupportsSubtreeIterators (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  878.     BEGIN
  879.         volSupportsSubtreeIterators := BTST(GetVolParmsInfoExtendedAttributes(volParms), bSupportsSubtreeIterators);
  880.     END;
  881.     
  882.     FUNCTION volL2PCanMapFileBlocks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  883.     BEGIN
  884.         volL2PCanMapFileBlocks := BTST(GetVolParmsInfoExtendedAttributes(volParms), bL2PCanMapFileBlocks);
  885.     END;
  886.     
  887.     {    Functions for testing ioACUser bits.    }
  888.  
  889.     FUNCTION userIsOwner (ioACUser: SInt8): Boolean;
  890.     BEGIN
  891.         userIsOwner := NOT (BTST(ioACUser, kioACUserNotOwnerMask));
  892.     END;
  893.  
  894.     FUNCTION userHasFullAccess (ioACUser: SInt8): Boolean;
  895.     BEGIN
  896.         userHasFullAccess := BAND(ioACUser, acUserAccessMask) = acUserFull;
  897.     END;
  898.  
  899.     FUNCTION userHasDropBoxAccess (ioACUser: SInt8): Boolean;
  900.     BEGIN
  901.         userHasDropBoxAccess := BAND(ioACUser, acUserAccessMask) = acUserDropBox;
  902.     END;
  903.  
  904.     FUNCTION userHasBulletinBoard (ioACUser: SInt8): Boolean;
  905.     BEGIN
  906.         userHasBulletinBoard := BAND(ioACUser, acUserAccessMask) = acUserBulletinBoard;
  907.     END;
  908.  
  909.     FUNCTION userHasNoAccess (ioACUser: SInt8): Boolean;
  910.     BEGIN
  911.         userHasNoAccess := BAND(ioACUser, acUserAccessMask) = acUserNone;
  912.     END;
  913.  
  914.  
  915. END.